草庐IT

c++ - QML Qt openUrlExternally

全部标签

c++ - 为什么多次递增/递减在 C++ 中有效但在 C 中无效?

测试.(c/cpp)#includeintmain(intargc,char**argv){inta=0,b=0;printf("a=%d,b=%d\n",a,b);b=(++a)--;printf("a=%d,b=%d\n",a,b);return0;}如果我将上面的内容保存为.cpp文件,它会在执行时编译并输出:a=0,b=0a=0,b=1但是,如果我将其保存为.c文件,则会出现以下错误:test.c:7:12:error:lvaluerequiredasdecrementoperator.(++a)操作不应该在(newValue)--操作之前解决吗?有没有人对此有任何见解?

c++ - 为什么我们不能从 void* 隐式分配给 C++ 中的任何其他类型,但它在 C 中更受欢迎?

这个问题在这里已经有了答案:WhydoesC++requireacastformalloc()butCdoesn't?(4个答案)关闭8年前。根据this最好不要在C中转换ma​​lloc,因为如果转换ma​​lloc的返回值,那么将被标记的错误将被隐藏,导致很难发现错误。还有,在维护的时候,如果指针的类型改变了,但是cast没有改变,又是一个很难发现的bug。大多数有经验的程序员选择的方法是:p=malloc(n*sizeof*p);ma​​lloc没有强制转换,因为不需要强制转换,而不是使用sizeof(type)来确定block的大小,使用sizeof*ptr。通过取消引用指针并

c++ - extern"C"与 extern 的区别

我对整个header使用extern"C"说明符,还是为每个函数指定extern有区别吗?据我所知,没有,因为只有函数和变量可以外部链接,所以当我在每个函数原型(prototype)和外部变量之前使用extern说明符时,我不需要使用全局extern"C"声明!?示例A:#ifdef__cplusplusextern"C"{#endifvoidwhatever(void);#endif示例B:externvoidwhatever(void); 最佳答案 C++文件中extern"C"的存在允许从C客户端调用程序代码调用特定的C++函

c++ - 使用 C/C++ 原生函数设置文件属性

我知道如何使用SetFileAttributes函数在Windows上设置文件属性。但是我想知道是否有原生的C/C++函数也可以做到这一点? 最佳答案 不,没有。标准C++和标准C均未指定此类函数。这是因为不同操作系统在该领域的功能几乎没有共同之处。例如,类UNIX操作系统具有“可执行”属性,而类Windows操作系统使用文件扩展名来确定可执行性。 关于c++-使用C/C++原生函数设置文件属性,我们在StackOverflow上找到一个类似的问题: http

c++ - 在堆上分配内存的函数原型(prototype) (C/C++)

我是C++的新手,所以这可能是一个初学者问题。它考虑了做一些我怀疑相当普遍的事情的“适当”风格。​​我正在编写一个函数,该函数在履行其职责时会在堆上分配内存以供调用者使用。我很好奇这个函数的好的原型(prototype)应该是什么样子。现在我有:intf(char**buffer);要使用它,我会写:char*data;intdata_length=f(&data);//...delete[]data;但是,我将一个指针传递给一个指针这一事实提示我,我可能以错误的方式执行此操作。有没有人愿意开导我? 最佳答案 在C中,这或多或少是合

c++ - 哪个跨平台 GUI 库对每个平台都具有最原生的感觉?

我注意到GTK在所有平台上都有统一的感觉,这对Linux爱好者来说非常好,但对于喜欢原生GUI感觉的人来说就不那么好了。我还没有正确使用Qt,这就是为什么我不能说这是为每个平台提供最原生感觉的最佳选择-所以有人可以确认Qt是否是我所追求的? 最佳答案 我认为Qt是拥有原生外观的绝佳选择。在WindowsXP上,小部件将使用Luna样式(WindowsXP默认样式)呈现。在Vista/7上,它们将使用Aero主题呈现。在MacOS上,它们将使用Aqua主题呈现。在Linux上,情况有所不同。Qt将使用他自己的主题(Plastique风

c++ - (void**) 在 C 中是什么意思?

我会查找它,但老实说我不知道​​从哪里开始,因为我不知道它叫什么。我见过像这样传递给函数的变量:myFunction((void**)&variable);这让我很困惑,因为所有这些对我来说都很熟悉;我以前从未见过它们像这样组合在一起。这是什么意思?我是新手所以术语越少越好,谢谢! 最佳答案 void*是“指向任何东西的指针”。void**是另一种间接级别——“指向任何东西的指针”。基本上,当您希望允许函数返回任何类型的指针时,您将其传入。&variable获取变量的地址。variable应该已经是某种指针,但它可能不是void*-

c++ - 停止阻塞在 recv() 上的接收器线程

我有一个聊天应用程序,它有一个单独的线程来监听传入的消息。while(mainthreadnotcallingforreceivertoquit){stringmessage=tcpCon.tcpReceive();//Reliesontherecv()functionprocessIncomingMessage(message);}这种工作方式有一个大问题。大多数时候,循环将阻塞在recv()上,因此接收线程不会退出。在几秒钟后不强制线程终止的情况下,解决此问题的正确方法是什么? 最佳答案 使用shutdown()关闭套接字,为所

c++ - 指向同一个地址的两个指针

很难说出这里要问什么。这个问题模棱两可、含糊不清、不完整、过于宽泛或夸夸其谈,无法以目前的形式得到合理的回答。如需帮助澄清此问题以便重新打开,visitthehelpcenter.关闭10年前。当两个指针指向同一个地址时会发生什么?这会导致安全问题吗?

c++ - C 的 -> 是否等同于 Objective-C 中的点符号

我正在做Box2D编程,请注意,我对C++和C完全是菜鸟。我是一个Objective-C的人,这就是为什么我很难理解这种语言。特别是:->基本上我的理解是它用于引用不同的方法或函数或变量/属性,如下所示:body->GetWorld()->DestroyBody(body);这是否等同于Objective-C中的点符号://madeupexample[body.worlddestroyBody];或[selfdestroyBody:body.world];或者类似的东西?我真的不明白这一点。有人可以提醒我这是什么吗?谢谢! 最佳答案